home *** CD-ROM | disk | FTP | other *** search
- #include "header.h"
-
- extern DirectDraw *DD;
- extern BYTE GVects[256][256];
- int GetLine(char *buff, int n, FILE *in);
-
- int WORLD::LoadWorld(char *filename)
- {
- FILE *fp;
- char buf[100];
- char String[100];
- char String2[100];
- int i, j;
-
- Number_LandScapes = 0;
- Number_Cameras = 0;
- Number_Textures = 0;
- // Number_BObjects = 0;
-
- fp = fopen(filename, "rt");
- if(!fp)
- {
- MessageBox(GetFocus(), "File error on open.",
- "Error Opening File", MB_OK | MB_ICONEXCLAMATION);
- fclose(fp);
- return -1;
- }
-
- while(GetLine(buf, sizeof(buf), fp) != -1)
- {
- sscanf(buf, "%s", String);
- for(i = 0; i < strlen(String); i++)
- String[i] = (char)toupper(String[i]);
-
- if(stricmp(String, "NUMBER_LANDSCAPES") == 0)
- {
- sscanf(buf, "%*s %d", &i);
- LandScape = new LANDSCAPE[i];
- }
-
- else if(stricmp(String, "NUMBER_TEXTURES") == 0)
- {
- sscanf(buf, "%*s %d", &i);
- Texture = new HDIB[i];
- }
-
- else if(stricmp(String, "NUMBER_CAMERAS") == 0)
- {
- sscanf(buf, "%*s %d", &i);
- Camera = new CAMERA[i];
- }
-
- /* else if(stricmp(String, "NUMBER_BOBJECTS") == 0)
- {
- sscanf(buf, "%*s %d", &i);
- BitmapObj = new BITMAPOBJ[i];
- }*/
-
- else if(stricmp(String, "TEXTURE") == 0)
- {
- sscanf(buf, "%*s %s", String);
- Texture[Number_Textures].Load(String);
- Number_Textures++;
- }
-
- else if(stricmp(String, "LANDSCAPE") == 0)
- {
- if(!LandScape)
- MessageBox(GetFocus(),
- "Memory not allocated for landscapes.",
- "Loading Error", MB_OK);
-
- GetLine(buf, sizeof(buf), fp);
- sscanf(buf, "%s", String);
- if(stricmp(String, "{") != 0)
- {
- MessageBox(GetFocus(),
- "Error reading landscape.",
- "Critical Error", MB_OK);
- fclose(fp);
- return -1;
- }
-
- for(;;)
- {
- GetLine(buf, sizeof(buf), fp);
- sscanf(buf, "%s", String);
- for(i = 0; i < strlen(String); i++)
- String[i] = (char)toupper(String[i]);
-
- if(stricmp(String, "MAPS") == 0)
- {
- sscanf(buf, "%*s %s %s", String, String2);
- LoadLandScapeFile(&LandScape[Number_LandScapes], String, String2);
- }
-
- else if(stricmp(String, "SCALE") == 0)
- {
- sscanf(buf, "%*s %ld", &LandScape[Number_LandScapes].Scaling);
- }
-
- else if(stricmp(String, "DETAIL") == 0)
- {
- sscanf(buf, "%*s %ld", &LandScape[Number_LandScapes].Detail);
- }
-
- else if(stricmp(String, "DISTANCE") == 0)
- {
- sscanf(buf, "%*s %ld", &LandScape[Number_LandScapes].Distance);
- }
-
- else if(stricmp(String, "POSITION") == 0)
- sscanf(buf, "%*s %f %f %f", &LandScape[Number_LandScapes].xStart, &LandScape[Number_LandScapes].yStart, &LandScape[Number_LandScapes].zStart);
-
- else if(stricmp(String, "}") == 0)
- break;
- }
- Number_LandScapes++;
- }
-
- /* else if(stricmp(String, "BOBJECT") == 0)
- {
- if(!BitmapObj)
- MessageBox(GetFocus(),
- "Memory not allocated for Bitmapped Objects.",
- "Loading Error", MB_OK);
-
- GetLine(buf, sizeof(buf), fp);
- sscanf(buf, "%s", String);
- if(stricmp(String, "{") != 0)
- {
- MessageBox(GetFocus(),
- "Error reading bitmap object.",
- "Critical Error", MB_OK);
- fclose(fp);
- return -1;
- }
-
- for(;;)
- {
- GetLine(buf, sizeof(buf), fp);
- sscanf(buf, "%s", String);
- for(i = 0; i < strlen(String); i++)
- String[i] = (char)toupper(String[i]);
-
- if(stricmp(String, "TEXTURE") == 0)
- {
- sscanf(buf, "%*s %d", &i);
- BitmapObj[Number_BObjects].Texture = i - 1;
- }
-
- else if(stricmp(String, "VERTEX1") == 0)
- {
- sscanf(buf, "%*s %f %f %f %d %d", &BitmapObj[Number_BObjects].Vertex[0].ox,
- &BitmapObj[Number_BObjects].Vertex[0].oy,
- &BitmapObj[Number_BObjects].Vertex[0].oz,
- &BitmapObj[Number_BObjects].TextPt[0].x,
- &BitmapObj[Number_BObjects].TextPt[0].y);
- }
-
- else if(stricmp(String, "VERTEX2") == 0)
- {
- sscanf(buf, "%*s %f %f %f %d %d", &BitmapObj[Number_BObjects].Vertex[1].ox,
- &BitmapObj[Number_BObjects].Vertex[1].oy,
- &BitmapObj[Number_BObjects].Vertex[1].oz,
- &BitmapObj[Number_BObjects].TextPt[1].x,
- &BitmapObj[Number_BObjects].TextPt[1].y);
- }
-
- else if(stricmp(String, "VERTEX3") == 0)
- {
- sscanf(buf, "%*s %f %f %f %d %d", &BitmapObj[Number_BObjects].Vertex[2].ox,
- &BitmapObj[Number_BObjects].Vertex[2].oy,
- &BitmapObj[Number_BObjects].Vertex[2].oz,
- &BitmapObj[Number_BObjects].TextPt[2].x,
- &BitmapObj[Number_BObjects].TextPt[2].y);
- }
-
- else if(stricmp(String, "VERTEX4") == 0)
- {
- sscanf(buf, "%*s %f %f %f %d %d", &BitmapObj[Number_BObjects].Vertex[3].ox,
- &BitmapObj[Number_BObjects].Vertex[3].oy,
- &BitmapObj[Number_BObjects].Vertex[3].oz,
- &BitmapObj[Number_BObjects].TextPt[3].x,
- &BitmapObj[Number_BObjects].TextPt[3].y);
- }
- else if(stricmp(String, "}") == 0)
- break;
- }
- BitmapObj[Number_BObjects].Number_Vertices = 4;
- BitmapObj[Number_BObjects].Color = 1;
- Number_BObjects++;
- }*/
-
- else if(stricmp(String, "CAMERA") == 0)
- {
- if(!Camera)
- MessageBox(GetFocus(),
- "Memory not allocated for cameras.",
- "Enigmatic Experience", MB_OK);
-
- GetLine(buf, sizeof(buf), fp);
- sscanf(buf, "%s", String);
- if(stricmp(String, "{") != 0)
- {
- MessageBox(GetFocus(), "Error reading camera.", "Critical Error", MB_OK);
- fclose(fp);
- return -1;
- }
-
- for(;;)
- {
- GetLine(buf, sizeof(buf), fp);
- sscanf(buf, "%s", String);
- for(i = 0; i < strlen(String); i++)
- String[i] = (char)toupper(String[i]);
-
- if(stricmp(String, "ANGLE") == 0)
- sscanf(buf, "%*s %f %f %f", &Camera[Number_Cameras].xAngle,&Camera[Number_Cameras].yAngle,&Camera[Number_Cameras].zAngle);
-
- else if(stricmp(String, "SCALE") == 0)
- sscanf(buf, "%*s %f %f %f", &Camera[Number_Cameras].xScale,&Camera[Number_Cameras].yScale,&Camera[Number_Cameras].zScale);
-
- else if(stricmp(String, "TRANSLATE") == 0)
- sscanf(buf, "%*s %f %f %f", &Camera[Number_Cameras].xTrans,&Camera[Number_Cameras].yTrans,&Camera[Number_Cameras].zTrans);
-
- else if(stricmp(String, "}") == 0)
- break;
- }
- Number_Cameras++;
- }
- }
-
- Current_Camera = 0;
- j = 0;
- for(i = 0; i < Number_LandScapes; i++)
- j += X_DIR * 2 * Z_DIR * 2;
- PolyList = new POLYGON[j];
- Number_Polygons = 0;
- fclose(fp);
- WorldOpen = TRUE;
- return 1;
- };
-
- int WORLD::LoadLandScapeFile(LANDSCAPE *l, char *RAWFile1, char *RAWFile2)
- {
- FILE *fp, *fp2;
- int i, j;
- int c;
- int width, height;
-
- fp = fopen(RAWFile1, "rb");
- fp2 = fopen(RAWFile2, "rb");
- if(!fp) return 0;
- if(!fp2) return 0;
-
- fread((BYTE *)ImageMap, 65536, 1, fp2);
- l->Width = 256; l->Height = 256;
- width = 256; height = 256;
- l->Number_Vertices = width * height;
- l->Vertex = new VERTEX[l->Number_Vertices];
-
- for(i = 0; i < height; i++)
- {
- for(j = 0; j < width; j++)
- {
- l->Vertex[i * width + j].ox = j * 1024;
- c = fgetc(fp);
- l->Vertex[i * width + j].oy = c * -50;
- l->Vertex[i * width + j].oz = i * 1024;
- l->Vertex[i * width + j].Vect = GVects[i][j];
- }
- }
-
- fclose(fp);
- fclose(fp2);
- return 0;
- };
-
- int GetLine(char *buff, int n, FILE *in)
- {
- char *p;
-
- do
- {
- if (fgets(buff, n, in) == 0)
- return -1;
- if ((p = strchr(buff, '\n')) != NULL)
- *p = '\0';
- if ((p = strchr(buff, ';')) != NULL)
- *p = '\0';
- for (p = buff; isspace(*p); ++p);
- } while (p[0] == '\0');
-
- return 0;
- };
-
-